package com.my.lucky.util;

import net.sourceforge.pinyin4j.PinyinHelper;
import net.sourceforge.pinyin4j.format.HanyuPinyinCaseType;
import net.sourceforge.pinyin4j.format.HanyuPinyinOutputFormat;
import net.sourceforge.pinyin4j.format.HanyuPinyinToneType;
import net.sourceforge.pinyin4j.format.exception.BadHanyuPinyinOutputFormatCombination;

import java.util.HashSet;
import java.util.Set;

/**
 * 拼音首字母提取工具类
 */
public class PinyinUtils {
    // 配置拼音格式（大写、无音调）
    private static final HanyuPinyinOutputFormat FORMAT = new HanyuPinyinOutputFormat();

    static {
        FORMAT.setCaseType(HanyuPinyinCaseType.UPPERCASE);
        FORMAT.setToneType(HanyuPinyinToneType.WITHOUT_TONE);
    }

    /**
     * 获取单个汉字的所有可能拼音首字母（去重）
     *
     * @param c 汉字
     * @return 首字母集合（如“行”→[X, H]）
     */
    public static Set<Character> getInitials(char c) {
        Set<Character> initials = new HashSet<>();
        try {
            // 获取该汉字的所有拼音（含多音字）
            String[] pinyins = PinyinHelper.toHanyuPinyinStringArray(c, FORMAT);
            if (pinyins == null) {
                return initials; // 非汉字，返回空
            }
            for (String pinyin : pinyins) {
                if (pinyin.isEmpty()) continue;
                // 提取首字母（如“zhāng”→'Z'，“ān”→'A'）
                char initial = pinyin.charAt(0);
                initials.add(initial);
            }
        } catch (BadHanyuPinyinOutputFormatCombination e) {
            e.printStackTrace();
        }
        return initials;
    }

    /**
     * 将词语转换为所有可能的首字母序列（考虑多音字组合）
     *
     * @param word 词语（如“行长”）
     * @return 首字母序列集合（如“行长”→[XZ, XH, HZ, HH]）
     */
//    public static Set<String> getWordInitials(String word) {
//        Set<String> result = new HashSet<>();
//        if (word==null|| word.trim().isEmpty()){
//            return result;
//        }
//        // 递归生成所有可能的首字母组合
//        generateInitials(word, 0, "", result);
//        return result;
//    }
    public static String getWordInitials(String word) {
        if (word == null || word.trim().isEmpty()) {
            return "";
        }
        Set<String> result = new HashSet<>();
        generateInitials(word, 0, "", result);
        return String.join(",", result);
    }


    // 递归生成首字母组合
    private static void generateInitials(String word, int index, String current, Set<String> result) {
        if (index == word.length()) {
            result.add(current);
            return;
        }
        char c = word.charAt(index);
        Set<Character> initials = getInitials(c);
        if (initials.isEmpty()) {
            // 非汉字直接拼接（如数字、字母）
            generateInitials(word, index + 1, current + c, result);
        } else {
            for (char initial : initials) {
                generateInitials(word, index + 1, current + initial, result);
            }
        }
    }

    public static void main(String[] args) {
        System.out.println(PinyinUtils.getWordInitials("6G概念,跨境支付(CIPS),PEEK材料,共封装光学(CPO),F5G概念"));
    }
}
